/**
 * 给你一个整数n，请你判断该整数是否是2的幂次方。如果是，返回true;否则，返回false。如果存在一个整数x使得 n == 2x次方，则认为n是2的幂次方
 * 示例一:
 *  输入: n = 1
 *  输出: true
 *  解释: 2的0次方 === 1
 * 示例二:
 *  输入: n = 16
 *  输出: true
 *  解释: 2的4次方 === 16
 * 示例三:
 *  输入: n = 3
 *  输出: false
*/
function powerOfTwo (n) {
    if (n < 1) {
        return false;
    }
    // 二分法查找
    let start = 0;
    let end = n;
    // 如果开始节点小于结束节点
    while (start <= end) {
        let mid = Math.floor((start + end) / 2);
        // 求出2的幂次方
        let mi = Math.pow(2, mid);
        if ( mi === n) {
            return true;
        } else if (mi < n) {
            start = mid + 1;
        } else {
            end = mid - 1;
        }
    }
    return false;
}
console.log(powerOfTwo(1));
console.log(powerOfTwo(16));
console.log(powerOfTwo(3));

